STAAD.Pro Help

OS. ExcelでのOpenSTAADマクロの記述

この例では、VBAでOpenSTAADマクロを記述するために必要ないくつかの概念を紹介します。

注記: 前の"Hello World!"の例に従った場合は、その行を削除するだけで、その時点から開始することができます。

OS. VBAでのOpenSTAADのインスタンス化

この一連の手順では、OpenSTAADをインスタンス化し、スプレッドシートマクロで開いているSTAAD.Proモデルから情報を取得します。

これは、コード内からOpenSTAAD APIにアクセスするために必要です。VBAでは、これは2つの部分からなる処理です。最初に対象をオブジェクトとして宣言し、次にそのオブジェクトをOpenSTAADで指示します。
  1. サブルーチン内で「Dim objOpenSTAAD As Object」と入力します。

    "Object"という語の入力を開始すると、関連する用語を含む小さなリストが開きます。これはインテリセンスと呼ばれるもので、コード行をすばやく正確に入力するのに役立ちます。

    注記: Visual Basicでは、オブジェクトを宣言してタイプを割り当てる必要があるため、使用するタイプを名前の前に付けることをお勧めします。ここでは、接頭辞"obj"を使用してオブジェクトを記述しています。後で、さまざまな接頭辞を使用して変数タイプを記述します。
  2. <Enter>キーを押します。
  3. Set objOpenSTAAD = GetObject(,”StaadPro.OpenSTAAD”)」と入力します。 これにより、手順1で定義した変数にOpenSTAADアプリケーションオブジェクトが割り当てられます。
    注記: ここでは、STAAD.Proのインスタンスが複数存在する状況で最初に開始されたインスタンスに接続しています。代わりに、特定のファイルのパスと名前を指定して、そのファイルを開いているアプリケーションのインスタンスに接続することもできます。
  4. <Enter>キーを押します。

OS. スプレッドシートでのgeometry関数の使用

OpenSTAADマクロを正常に実行するには、まずSTAAD.Pro内でモデルを開く必要があります。
この例では、OpenSTAADの関数を使用してモデルデータにアクセスします。
  1. Sheet1.[A1].Value = "Nodes:"」と入力し、<Enter>キーを押します。

    "Hello World"の例と同様に、これは単にテキスト文字列をセルに取り込みます。ここでは、データのラベルを指定すると便利です。

  2. Sheet1.[B1].Value = objOpenSTAAD.Geometry.GetNodeCount」と入力し、<Enter>キーを押します。

    ここでは、OpenSTAADオブジェクト内のGeometryクラスにあるGetNodeCount関数の戻り値にセルの値を割り当てています。

    この方法では、objOpenSTAADオブジェクト内のGetNodeCount関数に直接アクセスします。

  3. Dim objGeometry As OSGeometryUI」と入力し、<Enter>キーを押します。 VBAエディタをSTAADに接続している場合は、OSGeometryUIの入力を開始するとオートコンプリートが始まります。<Tab>キーを押すと、オートコンプリートのポップアップリストでハイライトされた結果を受け入れ、そのエントリの末尾に移動することができます。
  4. Set geometry = objOpensTAAD.geometry」と入力し、<Enter>キーを押します。 これにより、オブジェクトのジオメトリがOpenSTAADオブジェクト内のgeometryクラスに割り当てられます。
  5. Sheet1.[A2].Value = "Members:"」と入力し、<Enter>キーを押します。
  6. Sheet1.[B2].Value = geometry.GetMemberCount」と入力し、<Enter>キーを押します。 ここで、「geometry.」まで入力するとオートコンプリートのメニューが再び開き、OpenSTAADのgeometryクラス内のすべての関数とメソッドが表示されます。これは、最初にオブジェクトをそのクラスに設定したからです。
  7. マクロを実行します。 現在開いているSTAAD.Proモデル内のノードとメンバーの数がスプレッドシートに取り込まれます。

これで、現在開いているSTAAD.Proモデル内のノードとメンバーの数がスプレッドシートに取り込まれるようになります。

完成したコードは次のようになります。
Sub OpenSTAADTutorial()
    Dim objOpenSTAAD As Object
    Dim stdFile As String
    Set objOpenSTAAD = GetObject(, "StaadPro.OpenSTAAD")
    Sheet1.[A1].Value = "Nodes:"
    Sheet1.[B1].Value = objOpenSTAAD.geometry.GetNodeCount
    Dim geometry As OSGeometryUI
    Set geometry = objOpenSTAAD.geometry
    Sheet1.[A2].Value = "Members:"
    Sheet1.[B2].Value = geometry.GetMemberCount
End Sub
次に、スプレッドシートでマクロにアクセスするための簡単なUI要素を作成します。

OS. スプレッドシート内からのマクロの実行

マクロをアクティブにするためのボタンやその他の対話型ツールをスプレッドシートに追加するには、次の手順に従います。

マクロを実行するたびにVBAウィンドウを開く必要があるようでは、使いやすいとは言えません。より使いやすいスプレッドシートにするために、マクロ機能にアクセスするためのコントロールをスプレッドシートに追加することができます。
  1. スプレッドシートで、「開発」リボンタブの「コントロール」グループから「挿入」 > 「ボタン(フォームコントロール)」の順に選択します。
    マウスポインタが十字カーソルに変わります。
  2. スプレッドシート内の任意の場所をクリックして長方形にドラッグします。

    これがボタンのサイズと形状になるので、2x2のスプレッドシートのセルより少し小さいくらいにすると使いやすいものになります。

    「マクロの登録」ダイアログが開きます。
  3. 「マクロ名」のリストからサブルーチンの名前を選択し、「OK」をクリックします。 これにより、このサブルーチンを実行するボタンクリック操作が割り当てられます。
  4. スプレッドシートで新しいボタン(「ボタン1」)をクリックします。 マクロが実行され、スプレッドシートにノード数とメンバー数が取り込まれます。
    注記: 以前にVBAエディタウィンドウ内からマクロを実行したことがある場合は、何も起こっていないように見えるかもしれません。セルの内容を選択してクリアし、ボタンをもう一度クリックすると、動作していることがわかります。
  5. ボタンを右クリックして「テキストの編集」を選択し、ボタンのラベルをわかりやすいものに変更します。 ボタンの外の任意の場所をクリックして、テキスト編集状態を終了します。